package greedy;

/**
 * @Author: 海琳琦
 * @Date: 2022/3/1 23:14
 * https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
 * 买卖股票的最佳时机含手续费
 */
public class maxProfitI {

    /**
     * 使用贪心策略，就是最低值买，最高值（如果算上手续费还盈利）就卖。
     *
     * 此时无非就是要找到两个点，买入日期，和卖出日期。
     *
     * 买入日期：其实很好想，遇到更低点就记录一下。
     * 卖出日期：这个就不好算了，但也没有必要算出准确的卖出日期，只要当前价格大于（最低价格+手续费），就可以收获利润，
     * 至于准确的卖出日期，就是连续收获利润区间里的最后一天（并不需要计算是具体哪一天）。
     * @param prices
     * @param fee
     * @return
     */
    public static int maxProfit(int[] prices, int fee) {
        int sum = 0;
        //start记录最低值
        int minPrices = prices[0];
        for (int i = 1; i < prices.length; i++) {
            if (minPrices < prices[i]) {
                //盈利超过手续费
                int interest = prices[i] - minPrices - fee;
                if (interest > 0) {
                    sum += interest;
                    //相当于没有手续费来判断获利区间是否连续
                    minPrices = prices[i] - fee;
                }
            } else {
                //记录最低值
                minPrices = prices[i];
            }
        }
        return sum;
    }

    public static void main(String[] args) {
        int[] prices = {1,3,7,5,10,3};
        int fee = 3;
        int i = maxProfit(prices, fee);
        System.out.println(i);
    }
}
